#include"etudiant.h"
#include<iostream>

Etudiant::Etudiant(const std::string& noe,
                    const std::string& nom,
                    const std::string& prenom,
                    const std::string& adressePostale,
                    const std::string& adresseElectronique)
                    : Personne(nom,
                     prenom,
                     adressePostale,
                     adresseElectronique),
                     noe_(noe)
{
}

Etudiant::Etudiant(const Etudiant& etu) : Personne(etu)
{
    noe_ = etu.getNoe();
    nom_ = etu.nom_;
    prenom_ = etu.prenom_;
    adressePostale_=etu.adressePostale_;
    adresseElectronique_=etu.adresseElectronique_;

    qnoe = QString (noe_.c_str());

}

Etudiant::~Etudiant()
{
}

void Etudiant::initEtudiantSystem ()
{
    qRegisterMetaTypeStreamOperators<Etudiant>("Etudiant");

    qMetaTypeId<Etudiant>();	// Teste la validité de la classe
}

QDataStream & operator << (QDataStream & out, const Etudiant & Valeur)
{

    out << Valeur.qnoe
        << Valeur.qnom
        << Valeur.qprenom
        << Valeur.qadrp
        << Valeur.qadre;

    return out;
}
QDataStream & operator >> (QDataStream & in, Etudiant & Valeur)
{

    in >> Valeur.qnoe;
    in >> Valeur.qnom;
    in >> Valeur.qprenom;
    in >> Valeur.qadrp;
    in >> Valeur.qadre;

    return in;
}

std::string Etudiant::getNoe() const
{
	return noe_;
}

bool Etudiant::operator <(const Etudiant& e) const
{
    return noe_ < e.noe_;
}

std::ostream& operator<<(std::ostream& os, const Etudiant& e)
{
	os << (e.getNoe()) <<" se nomme :\n\t" << (e.getNom()) << " " << (e.getPrenom()) << "\n\tAdresse Postale : " << (e.getAdrPost()) << "\n\tAdresse Electronique : " << (e.getAdrEl());
	
	return os;
}

bool ComparatorEtudiant::operator ()(const Etudiant& e1, const Etudiant& e2)
{
    return e1<e2;
}

EnsembleEtu::EnsembleEtu()
{
}

void EnsembleEtu::ajoutEtudiant(Etudiant *etu)
{
    listEtudiant_.insert(etu);
}

void EnsembleEtu::ajoutEnsEtudiant(ensEtudiant eEtu)
{
    ensEtudiant::iterator itEtu;
    for (itEtu = eEtu.begin(); itEtu!= eEtu.end(); ++itEtu)
    {
        listEtudiant_.insert((*itEtu));
    }
}

ensEtudiant EnsembleEtu::getEnsembleEtu()
{
    return listEtudiant_;
}

void EnsembleEtu::supprEtudiant(Etudiant *etu)
{
    listEtudiant_.erase(listEtudiant_.find(etu));
    delete etu;
}
